/*
 * Copyright (c) 2017, 1DAOYUN and/or its affiliates. All rights reserved.
 * 1DAOYUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
 */
package com.iot.nev.gateway.server;

import com.iot.nev.gateway.collector.Collector;
import com.iot.nev.gateway.router.Router;

/**
 * 实现数据的链接、读取和转发。 网关底层实现根据协议可以是TCP Server, UDP Server,MQTT Server,HTTP Server等。
 * 分层和数据流程是：
 * 1.Collector收集器是一个Server，完成汽车终端数据的请求处理。接受的数据进行转码解码处理。转发给Router路由器，结束本次请求。
 * 2.Router路由器，负责把接受其的数据进行处理和转发，处理根据消息类型，创建主题(Topic)对外广播，路由器只负责根据网络头创建主题，
 * 同时也是同收集器的协议进行分类。目前走Kafka消息服务。
 * 3.Client消息通过Kafka派发后，有网管的客户端接收并进行处理。
 * 4.Connector根据消费者的类型进行数据的保存(HBase)、流处理(Spark Streaming)、Session处理(Mysql)、可视化(MongoDB)。
 * 5.分布式的考虑：Mysql记录登录登出日志信息，周期性归档。MongoDB只保存结果数据，数据量可控，HBase保存永久数据，用于数据分析。
 * 
 * @author Song Xueyong
 * @since V1.0
 * 
 */
public interface Server {
	
	/**
	 * 获得路由器(Kafka)。
	 * 
	 * @return
	 */
	public Collector getCollector();

	/**
	 * 获得路由器(Kafka)。
	 * 
	 * @return
	 */
	public Router getRouter();

	/**
	 * 启动网关服务。
	 */
	public void init();

	/**
	 * 启动网关服务。
	 */
	public void start();

	/**
	 * 停止网关服务。
	 */
	public void stop();

	/**
	 * 重启网关服务。
	 */
	public void restart();

	/**
	 * 判断网关服务的状态。
	 */
	public boolean isActive();

	/**
	 * 获得网关链接数量。
	 */
	public int getConnectedCount();

	/**
	 * 得到当前网关的接收处理服务能力。
	 */
	public float getServiceLevel();

}
